在現代 Web 開發中,框架的選擇對於開發效率和應用性能至關重要。Python 提供了多種強大的 Web 框架,其中 Flask 和 Django 是最受歡迎的兩個選擇。今天,我們將深入了解這兩個框架,從建構一個簡單的 Flask 網站開始,然後進入 Django 框架的安裝與設置,理解其核心結構。
Flask 是一個輕量級的 Web 框架,適合用於小型應用或快速原型開發。它的核心理念是簡單且可擴展,允許開發者根據需求自由添加功能。
首先,我們需要安裝 Flask。建議使用虛擬環境來管理項目依賴。
# 創建虛擬環境(可選)
python -m venv venv
# 啟動虛擬環境
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
# 安裝 Flask
pip install Flask
接下來,我們將創建一個簡單的 Flask 應用,處理基本的路由。
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "歡迎來到我的第一個 Flask 網站!"
@app.route('/about')
def about():
return "這是關於頁面。"
if __name__ == '__main__':
app.run(debug=True)
說明:
Flask
類別初始化應用程式。@app.route()
裝飾器用於定義路由。home()
和 about()
函式對應到不同的 URL 路徑。debug=True
允許在開發過程中自動重載和顯示錯誤訊息。在終端中運行以下命令來啟動 Flask 伺服器:
python app.py
打開瀏覽器,訪問 http://127.0.0.1:5000/
,你將看到「歡迎來到我的第一個 Flask 網站!」的訊息。訪問 http://127.0.0.1:5000/about
,則顯示「這是關於頁面。」。
Flask 支持使用模板引擎(如 Jinja2)來渲染 HTML 頁面,讓網頁更具動態性和可維護性。
步驟:
templates
資料夾。templates
資料夾內創建 home.html
和 about.html
文件。home.html
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<title>首頁</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ message }}</p>
</body>
</html>
about.html
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<title>關於我們</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ description }}</p>
</body>
</html>
修改 app.py 以渲染模板
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('home.html', title="首頁", message="歡迎來到我的第一個 Flask 網站!")
@app.route('/about')
def about():
return render_template('about.html', title="關於我們", description="這是關於頁面。")
if __name__ == '__main__':
app.run(debug=True)
說明:
render_template()
函式用於渲染指定的 HTML 模板,並傳遞變數給模板。{{ variable }}
語法用於插入動態內容。Flask 也能夠處理表單提交,這對於用戶輸入和互動非常有用。
步驟:
form.html
。form.html
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<title>提交表單</title>
</head>
<body>
<h1>提交你的資訊</h1>
<form method="POST" action="/submit">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" required>
<br><br>
<input type="submit" value="提交">
</form>
</body>
</html>
app.py
以處理表單。from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def home():
return render_template('home.html', title="首頁", message="歡迎來到我的第一個 Flask 網站!")
@app.route('/about')
def about():
return render_template('about.html', title="關於我們", description="這是關於頁面。")
@app.route('/form')
def form():
return render_template('form.html')
@app.route('/submit', methods=['POST'])
def submit():
name = request.form.get('name')
return f"感謝 {name} 的提交!"
if __name__ == '__main__':
app.run(debug=True)
說明:
/form
路由來顯示表單。/submit
路由處理 POST 請求,獲取表單數據並回應。Django 是一個高級的 Web 框架,提供了豐富的功能,如 ORM、管理後台、表單處理等,非常適合用於中大型應用的開發。相比 Flask 的輕量,Django 更加全面和結構化。
步驟:
同樣,建議在虛擬環境中安裝 Django。
pip install django
使用 django-admin
工具來創建一個新的 Django 項目。
django-admin startproject myproject
這將創建一個名為 myproject
的目錄,包含以下結構:
myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
進入項目目錄並啟動開發伺服器。
cd myproject
python manage.py runserver
打開瀏覽器,訪問 http://127.0.0.1:8000/
,你將看到 Django 的歡迎頁面。
Django 遵循「MTV」設計模式(Model-Template-View),這與傳統的 MVC 模式相似。
核心文件說明:
manage.py
:Django 的命令行工具,用於管理項目。settings.py
:配置項目設置,如數據庫、已安裝應用等。urls.py
:定義 URL 路由,將 URL 對應到視圖。wsgi.py
和 asgi.py
:用於部署應用的接口。在 Django 項目中,一個應用(app)是項目的組成部分,負責特定的功能。
python manage.py startapp myapp
這將創建一個名為 myapp
的目錄,包含以下結構:
myapp/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
說明:
models.py
:定義數據模型。views.py
:定義視圖函數或類。admin.py
:註冊模型到 Django 管理後台。在 myproject/settings.py
中,將新創建的應用加入 INSTALLED_APPS
列表:
# myproject/settings.py
INSTALLED_APPS = [
...
'myapp',
]
在 myapp
內創建一個 urls.py
文件,並定義應用的路由。
# myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('about/', views.about, name='about'),
]
接著,在主項目的 urls.py
中包含應用的路由。
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')),
]
在 myapp/views.py
中定義視圖函數來處理請求並返回響應。
# myapp/views.py
from django.http import HttpResponse
from django.shortcuts import render
def home(request):
return HttpResponse("歡迎來到我的第一個 Django 網站!")
def about(request):
return HttpResponse("這是關於頁面。")
再次啟動開發伺服器:
python manage.py runserver
訪問 http://127.0.0.1:8000/
,你將看到「歡迎來到我的第一個 Django 網站!」的訊息。訪問 http://127.0.0.1:8000/about/
,則顯示「這是關於頁面。」。
與 Flask 類似,Django 也支持使用模板來渲染 HTML 頁面。這有助於分離業務邏輯與前端呈現。
步驟:
myapp
內創建 templates
資料夾,並在其中創建 home.html
和 about.html
文件。home.html
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<title>首頁</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ message }}</p>
</body>
</html>
about.html
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<title>關於我們</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ description }}</p>
</body>
</html>
# myapp/views.py
from django.shortcuts import render
def home(request):
context = {
'title': '首頁',
'message': '歡迎來到我的第一個 Django 網站!'
}
return render(request, 'home.html', context)
def about(request):
context = {
'title': '關於我們',
'description': '這是關於頁面。'
}
return render(request, 'about.html', context)
說明:
render()
函數用於渲染指定的模板,並傳遞上下文變數給模板。{{ variable }}
語法用於插入動態內容。Django 提供了一個功能強大的管理後台,讓你可以輕鬆管理應用的數據。
步驟:
python manage.py createsuperuser
按照提示輸入用戶名、電子郵件和密碼。
假設我們有一個簡單的模型 LotteryNumber
:
# myapp/models.py
from django.db import models
class LotteryNumber(models.Model):
number = models.CharField(max_length=20)
draw_date = models.DateField()
def __str__(self):
return f"{self.number} - {self.draw_date}"
python manage.py makemigrations
python manage.py migrate
admin.py
# myapp/admin.py
from django.contrib import admin
from .models import LotteryNumber
admin.site.register(LotteryNumber)
啟動伺服器,並訪問 http://127.0.0.1:8000/admin/
,使用剛創建的管理員帳號登錄。你將看到 LotteryNumber
模型,並可以在這裡添加、修改和刪除數據。
今天,我們深入探討了兩個強大的 Python Web 框架——Flask 和 Django。Flask 以其輕量和靈活性適合快速開發小型應用,而 Django 提供了全面的功能,適合中大型項目的開發。
學習重點回顧:
Flask:
Django:
展望未來:
接下來的學習中,我們可以進一步探索 Flask 的擴展功能,如資料庫整合(SQLAlchemy)、表單處理(WTForms),以及 Django 的更高級功能,如用戶認證、REST API 開發等。通過實踐和專案開發,將理論知識轉化為實際技能,成為一名高效的 Web 開發者。
透過今天的學習,我們已經建立了使用 Flask 和 Django 開發 Web 應用的基礎。無論是選擇輕量的 Flask 還是功能全面的 Django,都能夠滿足不同規模和需求的開發項目。持續練習並挑戰更複雜的專案,將幫助我們在 Web 開發領域中更上一層樓!